package ar.edu.utn.frgp.banco.servlets;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ar.edu.utn.frgp.banco.domain.Cuenta;
import ar.edu.utn.frgp.banco.domain.Movimientos;
import ar.edu.utn.frgp.banco.domain.PlazoFijo;
import ar.edu.utn.frgp.banco.domain.Transferencias;
import ar.edu.utn.frgp.banco.exceptions.ServiceException;
import ar.edu.utn.frgp.banco.forms.ReportesForm;
import ar.edu.utn.frgp.banco.service.PlazoFijoService;
import ar.edu.utn.frgp.banco.service.ReportesService;
import ar.edu.utn.frgp.banco.service.impl.PlazoFijoServiceImpl;
import ar.edu.utn.frgp.banco.service.impl.ReportesServiceImpl;
import ar.edu.utn.frgp.banco.utils.ConverterUtils;
import ar.edu.utn.frgp.banco.utils.RequestConverterUtils;

/**
 * Servlet implementation class ReportesServlet
 */
public class ReportesServlet extends SuperServlet {

	private ReportesService reportesService;
	private PlazoFijoService plazoFijo;
	private ReportesForm reportesForm;

	/**
	 * 
	 */
	private static final long serialVersionUID = -2108281839776604384L;

	public String inicioExD(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException, Exception {

		req.setAttribute("reportesForm",reportesForm);

		return "/app/reportes/DyE/depYExt.jsp";
	}

	public String mostrarExD(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException, Exception {
		req.setAttribute("reportesForm", reportesForm);

		if (!isPopulateOk())
			return inicioExD(req, resp);

		try {
			List<Movimientos> mov = reportesService
					.depositosYExtraccionesEntreFechas(reportesForm
							.getNumeroCuenta(), ConverterUtils
							.stringToDate(reportesForm.getFechaIni()),
							ConverterUtils.stringToDate(reportesForm
									.getFechaFin()));

			req.setAttribute("mov", mov);
		} catch (ServiceException e) {
			addAdvertencia(e.getError());
			return inicioExD(req, resp);
		}

		return "/app/reportes/DyE/depYExt.jsp";

	}

	public String inicioPlazoFijo(HttpServletRequest req,
			HttpServletResponse resp) throws ServletException, IOException,
			Exception {

		req.setAttribute("reportesForm", reportesForm);

		return "/app/reportes/DyE/depYExt.jsp";
	}
	
	
	public String mostrarPF(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException, Exception {
		req.setAttribute("reportesForm", reportesForm);

		if (!isPopulateOk())
			return "/app/reportes/plazosFijos.jsp";

		try {
			List<PlazoFijo> pf = plazoFijo.plazosFijosPorCliente(reportesForm.getDni());
			req.setAttribute("pf", pf);
		} catch (ServiceException e) {
			addAdvertencia(e.getError());
			return "/app/reportes/plazosFijos.jsp";
		}

		return "/app/reportes/plazosFijos.jsp";

	}
	
	public String mostrarTR(HttpServletRequest req, HttpServletResponse resp)	
			throws ServletException, IOException, Exception {
		req.setAttribute("reportesForm", reportesForm);
		
		if(!isPopulateOk())
			return "/app/reportes/transferencias.jsp";
		if (reportesForm.getNumeroCuenta() != null) {			
			try {
				List<Transferencias> tr= reportesService.historialTransferenciasRealizadas(reportesForm.getNumeroCuenta());
				req.setAttribute("tr", tr);
			}
			catch (ServiceException e){
			addAdvertencia(e.getError());
				return "/app/reportes/transferencias.jsp";
			}
		}
		
		return "/app/reportes/transferencias.jsp";
		
		
	}
	

	/**
	 * @see SuperServlet#SuperServlet()
	 */
	public ReportesServlet() {
		super();
		reportesService = new ReportesServiceImpl();
		plazoFijo = new PlazoFijoServiceImpl();
	}

	@Override
	public boolean populate(HttpServletRequest req) {
		boolean devuelve = true;
		reportesForm = new ReportesForm();

		if (req.getParameterMap().containsKey("numeroCuenta")) {
			if (RequestConverterUtils.canConvertLong(req, "numeroCuenta")) {
				reportesForm.setNumeroCuenta((RequestConverterUtils
						.convertLong(req, "numeroCuenta")));
			} else {
				devuelve = false;
			}
		}

		if (req.getParameterMap().containsKey("fechaIni")) {
			reportesForm.setFechaIni(req.getParameter("fechaIni"));
			if (!RequestConverterUtils.canConvertDate(req, "fechaIni")) {
				addAdvertencia("La fecha 'Desde' no contiene un formato valido. Por favor introduzca una fecha con el formato 'dd/MM/aaaa', por ejemplo: 21/04/2012'");
				devuelve = false;
			}
		}

		if (req.getParameterMap().containsKey("fechaFin")) {
			reportesForm.setFechaFin(req.getParameter("fechaFin"));
			if (!RequestConverterUtils.canConvertDate(req, "fechaFin")) {
				addAdvertencia("La fecha 'Hasta' no contiene un formato valido. Por favor introduzca una fecha con el formato 'dd/MM/aaaa', por ejemplo: 21/04/2012'");
				devuelve = false;
			}
		}

		reportesForm.setDni(clienteActivo.getDni());

		return devuelve;

	}

}
